/*******************************************************************************
 * Copyright (c) 2007, 2008 Gregory Jordan
 * 
 * This file is part of PhyloWidget.
 * 
 * PhyloWidget is free software: you can redistribute it and/or modify it under
 * the terms of the GNU General Public License as published by the Free Software
 * Foundation, either version 2 of the License, or (at your option) any later
 * version.
 * 
 * PhyloWidget is distributed in the hope that it will be useful, but WITHOUT
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
 * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
 * details.
 * 
 * You should have received a copy of the GNU General Public License along with
 * PhyloWidget. If not, see <http://www.gnu.org/licenses/>.
 */
package org.andrewberman.ui;

import org.andrewberman.ui.unsorted.ColorStringParser;

/**
 * <code>Color</code> is a lame extension of <code>java.awt.Color</code>,
 * with a few extra convenience functions tacked on. There should probably be a
 * better way of doing this, but I'm too lazy right now...
 * 
 * @author Greg
 * @see java.awt.Color
 */
public final class Color extends java.awt.Color
{
	private static final long serialVersionUID = 1L;

	public Color(int argb)
	{
		super(argb);
	}
	
	public Color(java.awt.Color c)
	{
		super(c.getRed(), c.getGreen(), c.getBlue(), c.getAlpha());
	}

	public Color(int r, int g, int b)
	{
		super(r, g, b);
	}

	public Color(int r, int g, int b, int a)
	{
		super(r, g, b, a);
	}

	public Color brighter(double diff)
	{
		int r = getRed();
		int g = getGreen();
		int b = getBlue();
		return new Color(Math.min((int) (r + diff), 255), Math.min((int) (g + diff), 255), Math.min((int) (b + diff),
			255));
	}

	public Color darker(double diff)
	{
		int r = getRed();
		int g = getGreen();
		int b = getBlue();
		return new Color(Math.max((int) (r - diff), 0), Math.max((int) (g - diff), 0), Math.max((int) (b - diff), 0));
	}

	public Color inverse()
	{
		int r = 255 - getRed();
		int g = 255 - getGreen();
		int b = 255 - getBlue();
		return new Color(r, g, b);
	}

	public static Color parseColor(String s)
	{
		s = s.replaceAll("[\"\'()]", ""); // Get rid of pesky parantheses and quotation marks
		try
		{
			java.awt.Color clr = (java.awt.Color) ColorStringParser.getParser().parse(s);
			return new Color(clr);
		} catch (Exception e)
		{
//			e.printStackTrace();
			return new Color(Color.BLACK);
		}

	}
}
